Constraint programming is a programming paradigm that is used to solve problems that depend on a number of different variables that have relationships with one another. The relationships between variables are expressed as constraints. Examples of problems that have been solved using constraint programming include scheduling (e.g., of people and other resources) and combinatorial optimization problems (e.g., configurations of automobiles or computers). Constraint programming is used to find feasible assignments to a set of variables subject to one or more constraints defining a problem. When the problem is successfully solved, values will be assigned to all the variables in the solution such that all constraints are satisfied. Conflicts occur when it is not possible or permissible to satisfy all the constraints. When constraints conflict the problem is not successfully solved. A valid solution requires that all constraints be satisfied.
Constraint solving systems can communicate with client applications to receive constraints between variables. In some systems, client applications do not have the ability to assign priorities or weights to constraints.
These systems, by definition, provide only two categories of constraints: user-selections made by the end-user, and non-override-able constraints that have been added by the client application.
Further, these systems do not have the capability to provide additional categories of constraints and have profound limits in how conflicts are resolved. For example, in current systems, any conflict within the non-override-able constraints will always reject a subsequently received user-selection or a subsequently received non-override-able constraint. Resolution of conflicts between two or more of the user-selections involves re-ordering past user-selection to determine if the new user-selection can be implemented in a solution. Conflicts between selections and non-overrideable choices are always resolved in favor of the non-override-able choices.
As such, in existing systems, users of client applications do not have the ability to decide which user-selections are given greater weight when more than one user is submitting user-selections.